lib/core: Support <remote>: syntax when listing refs
authorJonathan Lebon <jonathan@jlebon.com>
Fri, 16 Mar 2018 18:19:28 +0000 (14:19 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Fri, 16 Mar 2018 19:18:08 +0000 (19:18 +0000)
Allow users to pass `<remote>:` to list all refs we have locally
belonging to `<remote>`. Also (re-)allow the similar `<remote>:.` syntax
for backwards compatibility with flatpak.

Closes: #1500
Approved by: cgwalters

src/libostree/ostree-repo-refs.c
tests/test-refs.sh

index b96cfad04d09763646f5b9739b222e438fac13f8..ad0fd57c69848b7ea8ed259d7f7c7cd8ce9fba7b 100644 (file)
@@ -629,8 +629,24 @@ _ostree_repo_list_refs_internal (OstreeRepo       *self,
       const char *prefix_path;
       const char *path;
 
-      if (!ostree_parse_refspec (refspec_prefix, &remote, &ref_prefix, error))
-        return FALSE;
+      /* special-case "<remote>:" and "<remote>:.", which ostree_parse_refspec won't like */
+      if (g_str_has_suffix (refspec_prefix, ":") ||
+          g_str_has_suffix (refspec_prefix, ":."))
+        {
+          const char *colon = strrchr (refspec_prefix, ':');
+          g_autofree char *r = g_strndup (refspec_prefix, colon - refspec_prefix);
+          if (ostree_validate_remote_name (r, NULL))
+            {
+              remote = g_steal_pointer (&r);
+              ref_prefix = g_strdup (".");
+            }
+        }
+
+      if (!ref_prefix)
+        {
+          if (!ostree_parse_refspec (refspec_prefix, &remote, &ref_prefix, error))
+            return FALSE;
+        }
 
       if (!(flags & OSTREE_REPO_LIST_REFS_EXT_EXCLUDE_REMOTES) && remote)
         {
index 50862d76504d86d081f4979f3cbcb2760c64c30b..f4fe1833bbcb798a60837b19a376efe95214f26f 100755 (executable)
@@ -147,6 +147,13 @@ ${CMD_PREFIX} ostree --repo=repo refs local1 --create=origin:local1
 ${CMD_PREFIX} ostree --repo=repo refs | wc -l > refscount.create6
 assert_file_has_content refscount.create6 "^11$"
 
+#Check that we can list just remote refs
+${CMD_PREFIX} ostree --repo=repo refs origin: | wc -l > refscount.create7
+assert_file_has_content refscount.create7 "^2$" # origin:remote1 origin:local1
+#Also support :. for backcompat with flatpak
+${CMD_PREFIX} ostree --repo=repo refs origin:. | wc -l > refscount.create8
+assert_file_has_content refscount.create8 "^2$" # origin:remote1 origin:local1
+
 echo "ok refs"
 
 # Test symlinking a ref